#include "stdafx.h"
#include "模块ASM.h"
#include "游戏基址.h"
#include "游戏组包.h"

void Send_缓冲CALL(int cdov)
{
	__asm {
		push 0
		push cdov
		mov ecx, 发包基址
		mov ecx, [ecx]
		mov eax, 缓冲CALL
		call eax
	}
}
void Send_加密CALL(int wtud, int taya)
{
	int cdov = 0;
	if (taya == 1)cdov = 加密包CALL;
	if (taya == 2)cdov = 加密包CALL + 0x30;
	if (taya == 4)cdov = 加密包CALL + 0x60;
	if (taya == 8)cdov = 加密包CALL + 0x90;

	__asm {
		push wtud
		mov ecx, 发包基址
		mov ecx, dword ptr ss : [ecx]
		call cdov
	}
}
void Send_发包CALL()
{
	__asm {
		mov eax, 发包CALL
		call eax
	}
}

void 组包卖物(int 位置)
{
	Send_缓冲CALL(22);
	Send_加密CALL(0, 1);
	Send_加密CALL(位置, 2);
	Send_加密CALL(1, 2);
	Send_加密CALL(0, 4);
	Send_加密CALL(ASM_加(位置, 1), 4);
	Send_发包CALL();
}

void 组包分解(int 位置)
{
	Send_缓冲CALL(26);
	Send_加密CALL(位置, 2);
	Send_加密CALL(0, 1);
	Send_加密CALL(65535, 2);
	Send_加密CALL(319, 4);
	Send_发包CALL();
}

void 组包城镇移动(int 大地图ID,int 小地图ID,int X,int Y)
{
	Send_缓冲CALL(36);
	Send_加密CALL(大地图ID, 1);
	Send_加密CALL(小地图ID, 1);
	Send_加密CALL(X, 2);
	Send_加密CALL(Y, 2);
	Send_加密CALL(5, 1);
	Send_加密CALL(9, 2);
	Send_加密CALL(2, 2);
	Send_加密CALL(0, 4);
	Send_加密CALL(0, 1);
	Send_发包CALL();
}

void 组包选图()
{
	Send_缓冲CALL(15);
	Send_加密CALL(0, 4);
	Send_发包CALL();
}

void 组包进图(int 地图信息, int 地图难度, int 地图深渊, int 地图练习)
{
	Send_缓冲CALL(16);
	Send_加密CALL(地图信息, 4);
	Send_加密CALL(地图难度, 1);
	Send_加密CALL(4, 2);
	Send_加密CALL(地图深渊, 1);
	Send_加密CALL(地图练习, 1);
	Send_加密CALL(65535, 2);
	Send_加密CALL(0, 4);
	Send_加密CALL(0, 1);
    Send_加密CALL(0, 4);
	Send_加密CALL(0, 1);
    Send_加密CALL(-1, 4);
	Send_发包CALL();
}

void 组包剧情(int 地图ID, int 副本难度, int 任务ID)
{
	Send_缓冲CALL(16);
	Send_加密CALL(地图ID, 4);
	Send_加密CALL(副本难度, 1);
	Send_加密CALL(0, 2);
	Send_加密CALL(0, 1); // ' 0正常 1深渊
	Send_加密CALL(0, 1);  //' 0正常 1练习
	Send_加密CALL(0, 4);
	Send_加密CALL(任务ID, 4);
	Send_加密CALL(0, 1);
	Send_加密CALL(0, 1);
	Send_发包CALL();
}

void 组包拾取(int 物品地址,int 人物X,int 人物Y)
{
	int 物品X;
	int 物品Y;
	物品X = ASM_加(人物X, ASM_取随机数(-10, 10));
	物品Y = ASM_加(人物Y, ASM_取随机数(-10, 10));
	Send_缓冲CALL(43);
	Send_加密CALL(物品地址, 2);
	Send_加密CALL(0, 1);
	Send_加密CALL(1, 1);
	Send_加密CALL(人物X, 2);
	Send_加密CALL(人物Y, 2);
	Send_加密CALL(0, 2);
	Send_加密CALL(物品X, 2);
	Send_加密CALL(物品Y, 2);
	Send_加密CALL(0, 2);
	Send_加密CALL(0, 2);
	Send_发包CALL();
}

void 组包翻牌(int x,int y)
{
	Send_缓冲CALL(69);
	Send_发包CALL();
	Send_缓冲CALL(70);
	Send_发包CALL();
	Send_缓冲CALL(71);
	Send_加密CALL(x, 1);
	Send_加密CALL(y, 1);
	Send_发包CALL();
}

void 组包出图()
{
	Send_缓冲CALL(121);
	Send_加密CALL(0, 4);
	Send_加密CALL(0, 4);
	Send_加密CALL(0, 4);
	Send_加密CALL(0, 4);
	Send_加密CALL(0, 4);
	Send_加密CALL(0, 4);
	Send_发包CALL();
	Send_缓冲CALL(42);
	Send_发包CALL();

}
